package java_thinking.unit_10._10_7;

import java_thinking.unit_10._10_4.Contents;
import java_thinking.unit_10._10_4.Destination;

/**
 * @Description :   1.嵌套类：如果不需要内部类对象与其外围类对象之间有联系，那么可以将内部类声明为static
 *                  2.普通的内部类对象隐式的保存了一个引用指向创建它的外部类对象；
 *                  3.要创建嵌套类的对象，并不需要其外围类的对象；
 *                  4.不能从嵌套类的对象中访问非静态类的外围对象。
 *                  5.嵌套类与普通类另外一个区别：普通内部类的字段与方法只能放在类的外部层次上，所以普通内部类
 *                  不能有static数据和static字段，也不能包含一个嵌套类，但是嵌套类可以包含有这些东西；
 *                  6.因为第4点，所以嵌套类内部就没有特殊的this引用了；
 * @author: cww
 * @DateTime: 2019-03-10 18:39
 */

class Parcel11 {
    private static class ParcelContents implements Contents{
        private int i =11;
        @Override
        public int value() {
            return i;
        }
    }
    protected static class ParcelDestination implements Destination{
        private String label;
        private ParcelDestination(String whereTo){
            this.label = whereTo;
        }
        @Override
        public String readLabel() {
            return label;
        }
        public static void f(){

        }
        static int x = 10;
        static class AnotherLevel{
            public static void f(){
            }
            static int x = 10;
        }
    }
    public static Destination destination(String s){
        return new ParcelDestination(s);
    }
    public static Contents contents(){
        return new ParcelContents();
    }

    public static void main(String[] args) {
        Contents contents = contents();
        Destination destination = destination("dd");
    }
}
